package basic8;

class J15_Interface {

	public static void main(String[] args) {
		
//		J15_SungjukService sjsrv=new J15_SungjukService();
		//인터페이스는 new연산자를 통해 객체로 만들 수 없음 
		//반드시 이것을 상속(구현)한 클래스를 통해 객체로 생성 할 수 있음

		J15_SungJukService_Impl sjsrv=new J15_SungJukService_Impl();
		//성적처리에 필요한 기능(총점, 평균, 학점)들을 인터페이스로 분리해서 추상메서드로 정의하고
		//그것을 구현(implements)해서 클래스로 작성한다. 
		//J15_SungjukService(인터페이스) -> J15_SungJukService_Impl(구현클래스)
		J15_Sungjuk_VO sj=new J15_Sungjuk_VO("지현", 68, 89, 67);
		//값을 저장하는 클래스 선언 및 초기화
		sj.setTot(sjsrv.getTotal(sj));
		sj.setAvg(sjsrv.getAverage(sj));
		sj.setGrd(sjsrv.getGrade(sj));
		//총점, 평균, 학점 계산 후 각 변수에 값 저장
		System.out.println(sj.toString());
	}

}

// 인터페이스의 정의
interface J15_SungjukService {
	// 인터페이스가 제공할 메서드 정의

	// 메서드는 몸체를 제외한 서명(뼈대)까지만 작성한다.
	// 이러한 메서드를 추상메서드라 한다.

	
	// total값을 계산할 변수가 없기 때문에 외부에서 불러온다.
	// = 매개변수를 만들어준다.
	// int getTotal(int kor, int eng, int mat);
	// 변수마다 집어넣어주면 내용이 너무 많아지고 복잡해 지기 때문에 객체형(class)으로 넣어준다.
	int getTotal(J15_Sungjuk_VO sj);

	double getAverage(J15_Sungjuk_VO sj);

	char getGrade(J15_Sungjuk_VO sj);

}

